Date : 26 aout 1991
Protection : MOT DE PASSE ( manivelle )
Programme : COUGAR FORCE
Outils : SOFT-ICE V2.50
Fichier : FRED8.COM
Temps pass� : 2 HEURES
Soci�t� : INFERENCE M.D.O.
Divers : D�j� essay� plusieurs fois.
Origine : INDONESIE
Num�ro : 137
Ci dessous la chaine de COUGAR FORCE:
CS=0FF7
CS:09FE C45EF8 LES BX,[BP-08]
CS:0A01 268A07 MOV AL,ES:[BX] ; MOV BYTE PTR ES:[BX],40
CS:0A04 B400 MOV AH,00 �����������������������
CS:0A06 257000 AND AX,0070
CS:0A09 B104 MOV CL,04
CS:0A0B D3F8 SAR AX,CL
CS:0A0D C45EF4 LES BX,[BP-0C]
CS:0A10 268A17 MOV DL,ES:[BX] ; MOV BYTE PTR ES:[BX],04
CS:0A13 B600 MOV DH,00 �����������������������
CS:0A15 3BC2 CMP AX,DX
CS:0A17 741C JZ 0A35 ; JMP 0A35
CS:0A19 B8FFFF MOV AX,FFFF ��������
CS:0A1C 50 PUSH AX
Il suffit de placer ces trois instructions � la suite les unes des
autres � partir de 0A01 comme dans GEISHA. Puis de cr�er un fichier
FRED8.COM qui d�tourne l'INT 21 sous-fonction 3D.
Malheureusement le programme se plante apr�s deux ou trois appels
de cet INT ! M�me ph�nom�ne que pour SUPER_C.
J'essaie avec une INT "vide" c'est � dire sans traitement et sans
PUSH ni POP des registres; le programme ne se plante plus.
J'y replace les PUSH et POP et cel� fonctionne toujours. J'active le
premier test sans rien d'autre ( test du drapeau ) et �a se plante !
Cel� ne signifie qu'une chose: avec mon test je modifie forcement les
drapeaux et comme je ne vois pas de PUSHF ni de POPF au d�but et � la
fin de ma routine je d�cide d'en ins�rer.
Et cel� fonctionne. C'est � se demander comment les pr�c�dents FRED
ont fait pour tourner !
Ci-dessous la routine en assembleur:
; PATCH POUR LE PROGRAMME COUGAR FORCE
; FREDDY_SOFT
code segment
org 100h
assume cs:code
start: jmp installe ; On va installer la routine r�sidente...
cr equ 0dh
lf equ 0ah
flag equ 3Dh ; Contenu de AH devant �tre test�.
adr_ip equ 4701h ; En CS:4701 il faut avoir 268A
instok db cr,lf,' D�tournement de l',39,'INT 21 sous-fonction 3D'
db cr,lf
db ' ....FREDDY_SOFT....','$'
drap db 0,0
elimine db cr,lf,'J',39,'ai en principe tout remis en l',39,'�tat....'
db cr,lf,'$'
int21 label dword ; sauvegarde des adresses SEG:OFF de l'INT21 d'origine
i40off db 0,0 ; OFFSET
i40seg db 0,0 ; SEGMENT
tsrint40 proc far
jmp short apr�s_id
db 'FR' ; On intercalle au d�but du code un identificateur
apr�s_id: pushf ; Un PUSHF qui n'a pas de POPF ! voir FREDCOM.exp
push ds ;
push dx ;
push cx ; On ne sauve que les registres utilis�s...
push bx ;
push ax ;
cmp byte ptr [drap],1 ; Si 1 on devient transparent.
jz suite ; Saut � l'INT 21 toutes fonctions valid�es.
cmp ah,flag ; AH = 3D.
jnz suite ; Si non on traite les INT 21 normalement.
mov dx,sp ; On sauve SP dans DX.
mov cx,20
incr: pop ds
dec cx
jz s
cmp word ptr ds:[adr_ip+5],7025h
jnz incr
mov bx,[adr_ip]
mov word ptr [bx],0c626h
add bx,2
mov word ptr [bx],4007h
add bx,2
mov word ptr [bx],0c626h
add bx,2
mov word ptr [bx],0407h
add bx,2
mov word ptr [bx],2aebh
mov byte ptr [drap],1h
s: mov sp,dx ; On restaure SP.
suite: pop ax ; On restaure tous les registres
pop bx
pop cx
pop dx
pop ds
popf
jmp int21 ; Appel de l'INT21 officielle
tsrint40 endp
eor:
|